home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
sdksaver
/
src
/
sdksaver.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-16
|
4KB
|
166 lines
/************************************************
* TOWNS-OSV2.1画面圧縮保存サイドワーク SDKSAVER.EXP *
* [SDKSAVER.C] (C) 頭脳圧搾工場仙台 *
* Version 0.1 1994/04/03 *
* Version 1.0 1994/08/18 *
*************************************************
■ 機能 ■
全標準画面モード対応画面保存サイドワーク
■ [使用法・登録例] ■
システム設定のサイドワークアプリ設定でSDKSAVER.EXPを設定する。
オプションは [-v] [path] ([...]は省略可能)
-v...仮想画面をまるごと保存するオプション
path...ファイルパスとファイル名先頭
[例] a:\graphics\image
作成ファイル
Aドライブのgraphicsディレクトリに
image0.tif
image1.tif
image2.tif
...
image999.tif
あるいは\SIDEWORK\SIDEWORK.SYSに次の一行を追加
S "スクリーンセーバー?" @:\SIDEWORK\SDKSAVER.EXP [-v] [path]
■ 構成する関数 ■
init : サイドワーク, T-BIOSの初期設定
term : サイドワーク, T-BIOSの終了処理
make_filename : 保存用ファイル名の取得
*/
#include <stdio.h>
#include <stdlib.h>
#include <egb.h>
#include <string.h>
#include <sidework.h>
extern int saveTiff(char *gwork, char *palt, int page, char *fileName, int vsflg);
/*******************
* T-BIOS作業領域 *
*******************/
static char *gwk ; /* グラフィックス作業領域 */
#define PaletteWorkSize (4+8*256) /* パレット情報退避領域サイズ */
static char *pwk ; /* パレット情報退避領域 */
static int orgWritePage ; /* 元の書き込みページ */
static int sidework ;
static int spage ;
/*********************************
* init ---- 表示系の初期化処理 *
*********************************/
void init(void)
{
int page[2] ; /* 画面モード */
spage = 1 ;
if ((gwk = malloc(EgbWorkSize + PaletteWorkSize)) != NULL) {
pwk = gwk + EgbWorkSize ;
EGB_getResolution(&page[0], &page[1]) ;
EGB_resolution(gwk, 1, page[1] | 0x40) ;/* ページ#1の画面モード */
EGB_resolution(gwk, 0, page[0] | 0x40) ;/* ページ#0の画面モード */
/* 現在の書き込みページを退避 */
orgWritePage = EGB_getWritePage(0, 0) ;
if (page[0] < 12 || page[0] > 22) spage =2 ;
}
}
/*******************************
* term ---- 表示系の終了処理 *
*******************************/
int term(void)
{
/* 元の書き込みページを復元 */
EGB_writePage(gwk, orgWritePage) ;
/* サイドワークプロセス終了処理 */
if (sidework != 0) sdk_terminate(gwk, NULL, NULL) ;
return 0 ;
}
/********************************************
* make_fileName ---- 保存ファイル名の作成 *
********************************************/
int fileExists(char *fileName){
FILE *fp ;
fp = fopen(fileName, "rb") ;
if (fp == NULL) return 0 ;
fclose(fp) ;
return 1 ;
}
int make_fileName(char *fileName,char *para){
int size,i,max ;
char *p ;
char num[9] ;
p = para ;
size = 0 ;
while (*p != '\0') p++ ;
p-- ;
while (*p != '\\' & *p != ':'){
p-- ;
size++ ;
}
size = 8 - size ;
for(max=1;size>0;size--) max *= 10 ;
if (max > 0){
for(i=0;i<max;i++){
strcpy(fileName, para) ;
strcat(fileName, _itoa(i, num, 10)) ;
strcat(fileName, ".tif") ;
if (fileExists(fileName) == 0) break ;
}
}else{
strcpy(fileName, para) ;
strcat(fileName, ".tif") ;
}
return 0 ;
}
/**************************
* main ---- mainprogram *
**************************/
void main(int argc, char *argv[])
{
char *filePath,*initpara ;
int argx ;
int vsflg = 0 ;
sidework = sdk_isAtWork() ;
if (sidework != 0 && sdk_start(32) != 0) return ;
filePath = malloc(256) ;
initpara = filePath + 128 ;
argx = argc ;
if (argx > 1 && argv[1][0] == '-' && (argv[1][1] == 'v' || argv[1][1] == 'V')) {
argx -= 1 ;
vsflg = 1 ;
}
if (argx != 2)
strcpy(initpara, "a:\\image") ; /* デフォルト */
else
strcpy(initpara, argv[argc-1]) ;
init() ; /* グラフィックスの初期化 */
make_fileName(filePath, initpara) ;
saveTiff(gwk, pwk, 0, filePath, vsflg) ;
make_fileName(filePath, initpara) ;
if (spage==2) saveTiff(gwk, pwk, 1, filePath, vsflg) ;
free(filePath) ;
term() ; /* グラフィックスとサイドワークの終了処理 */
}